<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Voro++: container.cc Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />



</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">Voro++
   
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
<script type="text/javascript" src="dynsections.js"></script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">container.cc</div>  </div>
</div>
<div class="contents">
<a href="container_8cc.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">// Voro++, a 3D cell-based Voronoi library</span>
<a name="l00002"></a>00002 <span class="comment">//</span>
<a name="l00003"></a>00003 <span class="comment">// Author   : Chris H. Rycroft (LBL / UC Berkeley)</span>
<a name="l00004"></a>00004 <span class="comment">// Email    : chr@alum.mit.edu</span>
<a name="l00005"></a>00005 <span class="comment">// Date     : August 30th 2011</span>
<a name="l00006"></a>00006 <span class="comment"></span>
<a name="l00007"></a>00007 <span class="comment">/** \file container.cc</span>
<a name="l00008"></a>00008 <span class="comment"> * \brief Function implementations for the container and related classes. */</span>
<a name="l00009"></a>00009 
<a name="l00010"></a>00010 <span class="preprocessor">#include &quot;<a class="code" href="container_8hh.html" title="Header file for the container_base and related classes.">container.hh</a>&quot;</span>
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 <span class="keyword">namespace </span>voro {
<a name="l00013"></a>00013 <span class="comment"></span>
<a name="l00014"></a>00014 <span class="comment">/** The class constructor sets up the geometry of container, initializing the</span>
<a name="l00015"></a>00015 <span class="comment"> * minimum and maximum coordinates in each direction, and setting whether each</span>
<a name="l00016"></a>00016 <span class="comment"> * direction is periodic or not. It divides the container into a rectangular</span>
<a name="l00017"></a>00017 <span class="comment"> * grid of blocks, and allocates memory for each of these for storing particle</span>
<a name="l00018"></a>00018 <span class="comment"> * positions and IDs.</span>
<a name="l00019"></a>00019 <span class="comment"> * \param[in] (ax_,bx_) the minimum and maximum x coordinates.</span>
<a name="l00020"></a>00020 <span class="comment"> * \param[in] (ay_,by_) the minimum and maximum y coordinates.</span>
<a name="l00021"></a>00021 <span class="comment"> * \param[in] (az_,bz_) the minimum and maximum z coordinates.</span>
<a name="l00022"></a>00022 <span class="comment"> * \param[in] (nx_,ny_,nz_) the number of grid blocks in each of the three</span>
<a name="l00023"></a>00023 <span class="comment"> *                          coordinate directions.</span>
<a name="l00024"></a>00024 <span class="comment"> * \param[in] (xperiodic_,yperiodic_,zperiodic_) flags setting whether the</span>
<a name="l00025"></a>00025 <span class="comment"> *                                               container is periodic in each</span>
<a name="l00026"></a>00026 <span class="comment"> *                                               coordinate direction.</span>
<a name="l00027"></a>00027 <span class="comment"> * \param[in] init_mem the initial memory allocation for each block.</span>
<a name="l00028"></a>00028 <span class="comment"> * \param[in] ps_ the number of floating point entries to store for each</span>
<a name="l00029"></a>00029 <span class="comment"> *                particle. */</span>
<a name="l00030"></a><a class="code" href="classvoro_1_1container__base.html#a2f7bde3ec593d9f4b8c9ceb67b56f62f">00030</a> <a class="code" href="classvoro_1_1container__base.html#a2f7bde3ec593d9f4b8c9ceb67b56f62f">container_base::container_base</a>(<span class="keywordtype">double</span> ax_,<span class="keywordtype">double</span> bx_,<span class="keywordtype">double</span> ay_,<span class="keywordtype">double</span> by_,<span class="keywordtype">double</span> az_,<span class="keywordtype">double</span> bz_,
<a name="l00031"></a>00031                 <span class="keywordtype">int</span> nx_,<span class="keywordtype">int</span> ny_,<span class="keywordtype">int</span> nz_,<span class="keywordtype">bool</span> xperiodic_,<span class="keywordtype">bool</span> yperiodic_,<span class="keywordtype">bool</span> zperiodic_,<span class="keywordtype">int</span> init_mem,<span class="keywordtype">int</span> ps_)
<a name="l00032"></a>00032         : <a class="code" href="classvoro_1_1voro__base.html" title="Class containing data structures common across all particle container classes.">voro_base</a>(nx_,ny_,nz_,(bx_-ax_)/nx_,(by_-ay_)/ny_,(bz_-az_)/nz_),
<a name="l00033"></a>00033         ax(ax_), bx(bx_), ay(ay_), by(by_), az(az_), bz(bz_),
<a name="l00034"></a>00034         xperiodic(xperiodic_), yperiodic(yperiodic_), zperiodic(zperiodic_),
<a name="l00035"></a>00035         id(new int*[nxyz]), p(new double*[nxyz]), co(new int[nxyz]), mem(new int[nxyz]), ps(ps_) {
<a name="l00036"></a>00036         <span class="keywordtype">int</span> l;
<a name="l00037"></a>00037         <span class="keywordflow">for</span>(l=0;l&lt;<a class="code" href="classvoro_1_1voro__base.html#a4309aca04ab561bd3b3921e9b73016a4">nxyz</a>;l++) <a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>[l]=0;
<a name="l00038"></a>00038         <span class="keywordflow">for</span>(l=0;l&lt;<a class="code" href="classvoro_1_1voro__base.html#a4309aca04ab561bd3b3921e9b73016a4">nxyz</a>;l++) <a class="code" href="classvoro_1_1container__base.html#a633edc1737859a7dde8ca2e466e12cfe">mem</a>[l]=init_mem;
<a name="l00039"></a>00039         <span class="keywordflow">for</span>(l=0;l&lt;<a class="code" href="classvoro_1_1voro__base.html#a4309aca04ab561bd3b3921e9b73016a4">nxyz</a>;l++) <span class="keywordtype">id</span>[l]=<span class="keyword">new</span> <span class="keywordtype">int</span>[init_mem];
<a name="l00040"></a>00040         <span class="keywordflow">for</span>(l=0;l&lt;<a class="code" href="classvoro_1_1voro__base.html#a4309aca04ab561bd3b3921e9b73016a4">nxyz</a>;l++) <a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[l]=<span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code" href="classvoro_1_1container__base.html#a235781536a17eab85b547787ff3618ba">ps</a>*init_mem];
<a name="l00041"></a>00041 }
<a name="l00042"></a>00042 <span class="comment"></span>
<a name="l00043"></a>00043 <span class="comment">/** The container destructor frees the dynamically allocated memory. */</span>
<a name="l00044"></a><a class="code" href="classvoro_1_1container__base.html#a624a890b979cc8f989778e0b627bad44">00044</a> <a class="code" href="classvoro_1_1container__base.html#a624a890b979cc8f989778e0b627bad44">container_base::~container_base</a>() {
<a name="l00045"></a>00045         <span class="keywordtype">int</span> l;
<a name="l00046"></a>00046         <span class="keywordflow">for</span>(l=0;l&lt;<a class="code" href="classvoro_1_1voro__base.html#a4309aca04ab561bd3b3921e9b73016a4">nxyz</a>;l++) <span class="keyword">delete</span> [] <a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[l];
<a name="l00047"></a>00047         <span class="keywordflow">for</span>(l=0;l&lt;<a class="code" href="classvoro_1_1voro__base.html#a4309aca04ab561bd3b3921e9b73016a4">nxyz</a>;l++) <span class="keyword">delete</span> [] <span class="keywordtype">id</span>[l];
<a name="l00048"></a>00048         <span class="keyword">delete</span> [] <a class="code" href="classvoro_1_1container__base.html#a50de485630d0b693fb418be1726826a7">id</a>;
<a name="l00049"></a>00049         <span class="keyword">delete</span> [] <a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>;
<a name="l00050"></a>00050         <span class="keyword">delete</span> [] <a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>;
<a name="l00051"></a>00051         <span class="keyword">delete</span> [] <a class="code" href="classvoro_1_1container__base.html#a633edc1737859a7dde8ca2e466e12cfe">mem</a>;
<a name="l00052"></a>00052 }
<a name="l00053"></a>00053 <span class="comment"></span>
<a name="l00054"></a>00054 <span class="comment">/** The class constructor sets up the geometry of container.</span>
<a name="l00055"></a>00055 <span class="comment"> * \param[in] (ax_,bx_) the minimum and maximum x coordinates.</span>
<a name="l00056"></a>00056 <span class="comment"> * \param[in] (ay_,by_) the minimum and maximum y coordinates.</span>
<a name="l00057"></a>00057 <span class="comment"> * \param[in] (az_,bz_) the minimum and maximum z coordinates.</span>
<a name="l00058"></a>00058 <span class="comment"> * \param[in] (nx_,ny_,nz_) the number of grid blocks in each of the three</span>
<a name="l00059"></a>00059 <span class="comment"> *                       coordinate directions.</span>
<a name="l00060"></a>00060 <span class="comment"> * \param[in] (xperiodic_,yperiodic_,zperiodic_) flags setting whether the</span>
<a name="l00061"></a>00061 <span class="comment"> *                                               container is periodic in each</span>
<a name="l00062"></a>00062 <span class="comment"> *                                               coordinate direction.</span>
<a name="l00063"></a>00063 <span class="comment"> * \param[in] init_mem the initial memory allocation for each block. */</span>
<a name="l00064"></a><a class="code" href="classvoro_1_1container.html#a50aaf382a069b102930b88976215818f">00064</a> <a class="code" href="classvoro_1_1container.html#a50aaf382a069b102930b88976215818f">container::container</a>(<span class="keywordtype">double</span> ax_,<span class="keywordtype">double</span> bx_,<span class="keywordtype">double</span> ay_,<span class="keywordtype">double</span> by_,<span class="keywordtype">double</span> az_,<span class="keywordtype">double</span> bz_,
<a name="l00065"></a>00065         <span class="keywordtype">int</span> nx_,<span class="keywordtype">int</span> ny_,<span class="keywordtype">int</span> nz_,<span class="keywordtype">bool</span> xperiodic_,<span class="keywordtype">bool</span> yperiodic_,<span class="keywordtype">bool</span> zperiodic_,<span class="keywordtype">int</span> init_mem)
<a name="l00066"></a>00066         : <a class="code" href="classvoro_1_1container__base.html" title="Class for representing a particle system in a three-dimensional rectangular box.">container_base</a>(ax_,bx_,ay_,by_,az_,bz_,nx_,ny_,nz_,xperiodic_,yperiodic_,zperiodic_,init_mem,3),
<a name="l00067"></a>00067         vc(*this,xperiodic_?2*nx_+1:nx_,yperiodic_?2*ny_+1:ny_,zperiodic_?2*nz_+1:nz_) {}
<a name="l00068"></a>00068 <span class="comment"></span>
<a name="l00069"></a>00069 <span class="comment">/** The class constructor sets up the geometry of container.</span>
<a name="l00070"></a>00070 <span class="comment"> * \param[in] (ax_,bx_) the minimum and maximum x coordinates.</span>
<a name="l00071"></a>00071 <span class="comment"> * \param[in] (ay_,by_) the minimum and maximum y coordinates.</span>
<a name="l00072"></a>00072 <span class="comment"> * \param[in] (az_,bz_) the minimum and maximum z coordinates.</span>
<a name="l00073"></a>00073 <span class="comment"> * \param[in] (nx_,ny_,nz_) the number of grid blocks in each of the three</span>
<a name="l00074"></a>00074 <span class="comment"> *                       coordinate directions.</span>
<a name="l00075"></a>00075 <span class="comment"> * \param[in] (xperiodic_,yperiodic_,zperiodic_) flags setting whether the</span>
<a name="l00076"></a>00076 <span class="comment"> *                                               container is periodic in each</span>
<a name="l00077"></a>00077 <span class="comment"> *                                               coordinate direction.</span>
<a name="l00078"></a>00078 <span class="comment"> * \param[in] init_mem the initial memory allocation for each block. */</span>
<a name="l00079"></a><a class="code" href="classvoro_1_1container__poly.html#a1d782b31e7d6f5b2040ee2d25753cb53">00079</a> <a class="code" href="classvoro_1_1container__poly.html#a1d782b31e7d6f5b2040ee2d25753cb53">container_poly::container_poly</a>(<span class="keywordtype">double</span> ax_,<span class="keywordtype">double</span> bx_,<span class="keywordtype">double</span> ay_,<span class="keywordtype">double</span> by_,<span class="keywordtype">double</span> az_,<span class="keywordtype">double</span> bz_,
<a name="l00080"></a>00080         <span class="keywordtype">int</span> nx_,<span class="keywordtype">int</span> ny_,<span class="keywordtype">int</span> nz_,<span class="keywordtype">bool</span> xperiodic_,<span class="keywordtype">bool</span> yperiodic_,<span class="keywordtype">bool</span> zperiodic_,<span class="keywordtype">int</span> init_mem)
<a name="l00081"></a>00081         : <a class="code" href="classvoro_1_1container__base.html" title="Class for representing a particle system in a three-dimensional rectangular box.">container_base</a>(ax_,bx_,ay_,by_,az_,bz_,nx_,ny_,nz_,xperiodic_,yperiodic_,zperiodic_,init_mem,4),
<a name="l00082"></a>00082         vc(*this,xperiodic_?2*nx_+1:nx_,yperiodic_?2*ny_+1:ny_,zperiodic_?2*nz_+1:nz_) {<a class="code" href="classvoro_1_1radius__poly.html#a9e40455c336c27b089c5a78ca94626d8">ppr</a>=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>;}
<a name="l00083"></a>00083 <span class="comment"></span>
<a name="l00084"></a>00084 <span class="comment">/** Put a particle into the correct region of the container.</span>
<a name="l00085"></a>00085 <span class="comment"> * \param[in] n the numerical ID of the inserted particle.</span>
<a name="l00086"></a>00086 <span class="comment"> * \param[in] (x,y,z) the position vector of the inserted particle. */</span>
<a name="l00087"></a><a class="code" href="classvoro_1_1container.html#a5c67c9998e4f174fb217967dcb41c7f3">00087</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container.html#a5c67c9998e4f174fb217967dcb41c7f3">container::put</a>(<span class="keywordtype">int</span> n,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z) {
<a name="l00088"></a>00088         <span class="keywordtype">int</span> ijk;
<a name="l00089"></a>00089         <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a1ab1b31f6fcd3080cc9fd0948df61e1a">put_locate_block</a>(ijk,x,y,z)) {
<a name="l00090"></a>00090                 <span class="keywordtype">id</span>[ijk][<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>[ijk]]=n;
<a name="l00091"></a>00091                 <span class="keywordtype">double</span> *pp=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[ijk]+3*co[ijk]++;
<a name="l00092"></a>00092                 *(pp++)=x;*(pp++)=y;*pp=z;
<a name="l00093"></a>00093         }
<a name="l00094"></a>00094 }
<a name="l00095"></a>00095 <span class="comment"></span>
<a name="l00096"></a>00096 <span class="comment">/** Put a particle into the correct region of the container.</span>
<a name="l00097"></a>00097 <span class="comment"> * \param[in] n the numerical ID of the inserted particle.</span>
<a name="l00098"></a>00098 <span class="comment"> * \param[in] (x,y,z) the position vector of the inserted particle.</span>
<a name="l00099"></a>00099 <span class="comment"> * \param[in] r the radius of the particle. */</span>
<a name="l00100"></a><a class="code" href="classvoro_1_1container__poly.html#a61689312fb6f8ee36f1fbb0fe00e4fe3">00100</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__poly.html#a61689312fb6f8ee36f1fbb0fe00e4fe3">container_poly::put</a>(<span class="keywordtype">int</span> n,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z,<span class="keywordtype">double</span> r) {
<a name="l00101"></a>00101         <span class="keywordtype">int</span> ijk;
<a name="l00102"></a>00102         <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a1ab1b31f6fcd3080cc9fd0948df61e1a">put_locate_block</a>(ijk,x,y,z)) {
<a name="l00103"></a>00103                 <span class="keywordtype">id</span>[ijk][<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>[ijk]]=n;
<a name="l00104"></a>00104                 <span class="keywordtype">double</span> *pp=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[ijk]+4*co[ijk]++;
<a name="l00105"></a>00105                 *(pp++)=x;*(pp++)=y;*(pp++)=z;*pp=r;
<a name="l00106"></a>00106                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1radius__poly.html#a9faed3ac8ef95c646e376a7fe915fb0b">max_radius</a>&lt;r) <a class="code" href="classvoro_1_1radius__poly.html#a9faed3ac8ef95c646e376a7fe915fb0b">max_radius</a>=r;
<a name="l00107"></a>00107         }
<a name="l00108"></a>00108 }
<a name="l00109"></a>00109 <span class="comment"></span>
<a name="l00110"></a>00110 <span class="comment">/** Put a particle into the correct region of the container, also recording</span>
<a name="l00111"></a>00111 <span class="comment"> * into which region it was stored.</span>
<a name="l00112"></a>00112 <span class="comment"> * \param[in] vo the ordering class in which to record the region.</span>
<a name="l00113"></a>00113 <span class="comment"> * \param[in] n the numerical ID of the inserted particle.</span>
<a name="l00114"></a>00114 <span class="comment"> * \param[in] (x,y,z) the position vector of the inserted particle. */</span>
<a name="l00115"></a><a class="code" href="classvoro_1_1container.html#a6e4a48cc9c31557457213923254fdda3">00115</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container.html#a5c67c9998e4f174fb217967dcb41c7f3">container::put</a>(<a class="code" href="classvoro_1_1particle__order.html" title="A class for storing ordering information when particles are added to a container.">particle_order</a> &amp;vo,<span class="keywordtype">int</span> n,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z) {
<a name="l00116"></a>00116         <span class="keywordtype">int</span> ijk;
<a name="l00117"></a>00117         <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a1ab1b31f6fcd3080cc9fd0948df61e1a">put_locate_block</a>(ijk,x,y,z)) {
<a name="l00118"></a>00118                 <span class="keywordtype">id</span>[ijk][<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>[ijk]]=n;
<a name="l00119"></a>00119                 vo.<a class="code" href="classvoro_1_1particle__order.html#adabcf6cd995eb03fe007844ba5637a8a">add</a>(ijk,co[ijk]);
<a name="l00120"></a>00120                 <span class="keywordtype">double</span> *pp=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[ijk]+3*co[ijk]++;
<a name="l00121"></a>00121                 *(pp++)=x;*(pp++)=y;*pp=z;
<a name="l00122"></a>00122         }
<a name="l00123"></a>00123 }
<a name="l00124"></a>00124 <span class="comment"></span>
<a name="l00125"></a>00125 <span class="comment">/** Put a particle into the correct region of the container, also recording</span>
<a name="l00126"></a>00126 <span class="comment"> * into which region it was stored.</span>
<a name="l00127"></a>00127 <span class="comment"> * \param[in] vo the ordering class in which to record the region.</span>
<a name="l00128"></a>00128 <span class="comment"> * \param[in] n the numerical ID of the inserted particle.</span>
<a name="l00129"></a>00129 <span class="comment"> * \param[in] (x,y,z) the position vector of the inserted particle.</span>
<a name="l00130"></a>00130 <span class="comment"> * \param[in] r the radius of the particle. */</span>
<a name="l00131"></a><a class="code" href="classvoro_1_1container__poly.html#aa0c81a2be68ed2a8b799ad7682c9b853">00131</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__poly.html#a61689312fb6f8ee36f1fbb0fe00e4fe3">container_poly::put</a>(<a class="code" href="classvoro_1_1particle__order.html" title="A class for storing ordering information when particles are added to a container.">particle_order</a> &amp;vo,<span class="keywordtype">int</span> n,<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z,<span class="keywordtype">double</span> r) {
<a name="l00132"></a>00132         <span class="keywordtype">int</span> ijk;
<a name="l00133"></a>00133         <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a1ab1b31f6fcd3080cc9fd0948df61e1a">put_locate_block</a>(ijk,x,y,z)) {
<a name="l00134"></a>00134                 <span class="keywordtype">id</span>[ijk][<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>[ijk]]=n;
<a name="l00135"></a>00135                 vo.<a class="code" href="classvoro_1_1particle__order.html#adabcf6cd995eb03fe007844ba5637a8a">add</a>(ijk,co[ijk]);
<a name="l00136"></a>00136                 <span class="keywordtype">double</span> *pp=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[ijk]+4*co[ijk]++;
<a name="l00137"></a>00137                 *(pp++)=x;*(pp++)=y;*(pp++)=z;*pp=r;
<a name="l00138"></a>00138                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1radius__poly.html#a9faed3ac8ef95c646e376a7fe915fb0b">max_radius</a>&lt;r) <a class="code" href="classvoro_1_1radius__poly.html#a9faed3ac8ef95c646e376a7fe915fb0b">max_radius</a>=r;
<a name="l00139"></a>00139         }
<a name="l00140"></a>00140 }
<a name="l00141"></a>00141 <span class="comment"></span>
<a name="l00142"></a>00142 <span class="comment">/** This routine takes a particle position vector, tries to remap it into the</span>
<a name="l00143"></a>00143 <span class="comment"> * primary domain. If successful, it computes the region into which it can be</span>
<a name="l00144"></a>00144 <span class="comment"> * stored and checks that there is enough memory within this region to store</span>
<a name="l00145"></a>00145 <span class="comment"> * it.</span>
<a name="l00146"></a>00146 <span class="comment"> * \param[out] ijk the region index.</span>
<a name="l00147"></a>00147 <span class="comment"> * \param[in,out] (x,y,z) the particle position, remapped into the primary</span>
<a name="l00148"></a>00148 <span class="comment"> *                        domain if necessary.</span>
<a name="l00149"></a>00149 <span class="comment"> * \return True if the particle can be successfully placed into the container,</span>
<a name="l00150"></a>00150 <span class="comment"> * false otherwise. */</span>
<a name="l00151"></a><a class="code" href="classvoro_1_1container__base.html#a1ab1b31f6fcd3080cc9fd0948df61e1a">00151</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classvoro_1_1container__base.html#a1ab1b31f6fcd3080cc9fd0948df61e1a">container_base::put_locate_block</a>(<span class="keywordtype">int</span> &amp;ijk,<span class="keywordtype">double</span> &amp;x,<span class="keywordtype">double</span> &amp;y,<span class="keywordtype">double</span> &amp;z) {
<a name="l00152"></a>00152         <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#af070c53156c75171a13dacb2ef2148aa">put_remap</a>(ijk,x,y,z)) {
<a name="l00153"></a>00153                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>[ijk]==<a class="code" href="classvoro_1_1container__base.html#a633edc1737859a7dde8ca2e466e12cfe">mem</a>[ijk]) <a class="code" href="classvoro_1_1container__base.html#aa0fe8c92c66463236a05924d466256da">add_particle_memory</a>(ijk);
<a name="l00154"></a>00154                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00155"></a>00155         }
<a name="l00156"></a>00156 <span class="preprocessor">#if VOROPP_REPORT_OUT_OF_BOUNDS ==1</span>
<a name="l00157"></a>00157 <span class="preprocessor"></span>        fprintf(stderr,<span class="stringliteral">&quot;Out of bounds: (x,y,z)=(%g,%g,%g)\n&quot;</span>,x,y,z);
<a name="l00158"></a>00158 <span class="preprocessor">#endif</span>
<a name="l00159"></a>00159 <span class="preprocessor"></span>        <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00160"></a>00160 }
<a name="l00161"></a>00161 <span class="comment"></span>
<a name="l00162"></a>00162 <span class="comment">/** Takes a particle position vector and computes the region index into which</span>
<a name="l00163"></a>00163 <span class="comment"> * it should be stored. If the container is periodic, then the routine also</span>
<a name="l00164"></a>00164 <span class="comment"> * maps the particle position to ensure it is in the primary domain. If the</span>
<a name="l00165"></a>00165 <span class="comment"> * container is not periodic, the routine bails out.</span>
<a name="l00166"></a>00166 <span class="comment"> * \param[out] ijk the region index.</span>
<a name="l00167"></a>00167 <span class="comment"> * \param[in,out] (x,y,z) the particle position, remapped into the primary</span>
<a name="l00168"></a>00168 <span class="comment"> *                        domain if necessary.</span>
<a name="l00169"></a>00169 <span class="comment"> * \return True if the particle can be successfully placed into the container,</span>
<a name="l00170"></a>00170 <span class="comment"> * false otherwise. */</span>
<a name="l00171"></a><a class="code" href="classvoro_1_1container__base.html#af070c53156c75171a13dacb2ef2148aa">00171</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classvoro_1_1container__base.html#af070c53156c75171a13dacb2ef2148aa">container_base::put_remap</a>(<span class="keywordtype">int</span> &amp;ijk,<span class="keywordtype">double</span> &amp;x,<span class="keywordtype">double</span> &amp;y,<span class="keywordtype">double</span> &amp;z) {
<a name="l00172"></a>00172         <span class="keywordtype">int</span> l;
<a name="l00173"></a>00173 
<a name="l00174"></a>00174         ijk=<a class="code" href="classvoro_1_1voro__base.html#a37fd9fdedc5d415e55f3bbb22a786d8c">step_int</a>((x-<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>)*<a class="code" href="classvoro_1_1voro__base.html#ad708515772990e5b2fa4e93c330f7aa0">xsp</a>);
<a name="l00175"></a>00175         <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a6734b7147a71bb7e2a4a313d4153bebf">xperiodic</a>) {l=<a class="code" href="classvoro_1_1voro__base.html#ab432b8bee0def0666ac39a132c721135">step_mod</a>(ijk,<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>);x+=<a class="code" href="classvoro_1_1voro__base.html#ac8986e621bd70cf5113e231cb8694d37">boxx</a>*(l-ijk);ijk=l;}
<a name="l00176"></a>00176         <span class="keywordflow">else</span> <span class="keywordflow">if</span>(ijk&lt;0||ijk&gt;=<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00177"></a>00177 
<a name="l00178"></a>00178         <span class="keywordtype">int</span> j=<a class="code" href="classvoro_1_1voro__base.html#a37fd9fdedc5d415e55f3bbb22a786d8c">step_int</a>((y-<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>)*<a class="code" href="classvoro_1_1voro__base.html#a300808cb0ccab85eb61dd0b25a5076de">ysp</a>);
<a name="l00179"></a>00179         <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a05a979d24c3d0fefe9f5cd96174863f8">yperiodic</a>) {l=<a class="code" href="classvoro_1_1voro__base.html#ab432b8bee0def0666ac39a132c721135">step_mod</a>(j,<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>);y+=<a class="code" href="classvoro_1_1voro__base.html#a3ad6b0eefbdff03e92d30f5035defdd1">boxy</a>*(l-j);j=l;}
<a name="l00180"></a>00180         <span class="keywordflow">else</span> <span class="keywordflow">if</span>(j&lt;0||j&gt;=<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00181"></a>00181 
<a name="l00182"></a>00182         <span class="keywordtype">int</span> k=<a class="code" href="classvoro_1_1voro__base.html#a37fd9fdedc5d415e55f3bbb22a786d8c">step_int</a>((z-<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>)*<a class="code" href="classvoro_1_1voro__base.html#ac51553412117b42816210e54805ad278">zsp</a>);
<a name="l00183"></a>00183         <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#acd3bdff20b8b11a3e606e5581ebf3c06">zperiodic</a>) {l=<a class="code" href="classvoro_1_1voro__base.html#ab432b8bee0def0666ac39a132c721135">step_mod</a>(k,<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>);z+=<a class="code" href="classvoro_1_1voro__base.html#afd53f018c9641c8b8066e9429c88a4e0">boxz</a>*(l-k);k=l;}
<a name="l00184"></a>00184         <span class="keywordflow">else</span> <span class="keywordflow">if</span>(k&lt;0||k&gt;=<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00185"></a>00185 
<a name="l00186"></a>00186         ijk+=<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>*j+<a class="code" href="classvoro_1_1voro__base.html#aad5f41101fce781214d2f0b69487a729">nxy</a>*k;
<a name="l00187"></a>00187         <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00188"></a>00188 }
<a name="l00189"></a>00189 <span class="comment"></span>
<a name="l00190"></a>00190 <span class="comment">/** Takes a position vector and attempts to remap it into the primary domain.</span>
<a name="l00191"></a>00191 <span class="comment"> * \param[out] (ai,aj,ak) the periodic image displacement that the vector is in,</span>
<a name="l00192"></a>00192 <span class="comment"> *                       with (0,0,0) corresponding to the primary domain.</span>
<a name="l00193"></a>00193 <span class="comment"> * \param[out] (ci,cj,ck) the index of the block that the position vector is</span>
<a name="l00194"></a>00194 <span class="comment"> *                        within, once it has been remapped.</span>
<a name="l00195"></a>00195 <span class="comment"> * \param[in,out] (x,y,z) the position vector to consider, which is remapped</span>
<a name="l00196"></a>00196 <span class="comment"> *                        into the primary domain during the routine.</span>
<a name="l00197"></a>00197 <span class="comment"> * \param[out] ijk the block index that the vector is within.</span>
<a name="l00198"></a>00198 <span class="comment"> * \return True if the particle is within the container or can be remapped into</span>
<a name="l00199"></a>00199 <span class="comment"> * it, false if it lies outside of the container bounds. */</span>
<a name="l00200"></a><a class="code" href="classvoro_1_1container__base.html#abe09747feba40102470c91f93d25fbfc">00200</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classvoro_1_1container__base.html#abe09747feba40102470c91f93d25fbfc">container_base::remap</a>(<span class="keywordtype">int</span> &amp;ai,<span class="keywordtype">int</span> &amp;aj,<span class="keywordtype">int</span> &amp;ak,<span class="keywordtype">int</span> &amp;ci,<span class="keywordtype">int</span> &amp;cj,<span class="keywordtype">int</span> &amp;ck,<span class="keywordtype">double</span> &amp;x,<span class="keywordtype">double</span> &amp;y,<span class="keywordtype">double</span> &amp;z,<span class="keywordtype">int</span> &amp;ijk) {
<a name="l00201"></a>00201         ci=<a class="code" href="classvoro_1_1voro__base.html#a37fd9fdedc5d415e55f3bbb22a786d8c">step_int</a>((x-<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>)*<a class="code" href="classvoro_1_1voro__base.html#ad708515772990e5b2fa4e93c330f7aa0">xsp</a>);
<a name="l00202"></a>00202         <span class="keywordflow">if</span>(ci&lt;0||ci&gt;=<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>) {
<a name="l00203"></a>00203                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a6734b7147a71bb7e2a4a313d4153bebf">xperiodic</a>) {ai=<a class="code" href="classvoro_1_1voro__base.html#a59a281a5e25e13f681c4f6a2c8bd1ca7">step_div</a>(ci,<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>);x-=ai*(<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>-<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>);ci-=ai*<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>;}
<a name="l00204"></a>00204                 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00205"></a>00205         } <span class="keywordflow">else</span> ai=0;
<a name="l00206"></a>00206 
<a name="l00207"></a>00207         cj=<a class="code" href="classvoro_1_1voro__base.html#a37fd9fdedc5d415e55f3bbb22a786d8c">step_int</a>((y-<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>)*<a class="code" href="classvoro_1_1voro__base.html#a300808cb0ccab85eb61dd0b25a5076de">ysp</a>);
<a name="l00208"></a>00208         <span class="keywordflow">if</span>(cj&lt;0||cj&gt;=<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>) {
<a name="l00209"></a>00209                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a05a979d24c3d0fefe9f5cd96174863f8">yperiodic</a>) {aj=<a class="code" href="classvoro_1_1voro__base.html#a59a281a5e25e13f681c4f6a2c8bd1ca7">step_div</a>(cj,<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>);y-=aj*(<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>-<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>);cj-=aj*<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>;}
<a name="l00210"></a>00210                 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00211"></a>00211         } <span class="keywordflow">else</span> aj=0;
<a name="l00212"></a>00212 
<a name="l00213"></a>00213         ck=<a class="code" href="classvoro_1_1voro__base.html#a37fd9fdedc5d415e55f3bbb22a786d8c">step_int</a>((z-<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>)*<a class="code" href="classvoro_1_1voro__base.html#ac51553412117b42816210e54805ad278">zsp</a>);
<a name="l00214"></a>00214         <span class="keywordflow">if</span>(ck&lt;0||ck&gt;=<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>) {
<a name="l00215"></a>00215                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#acd3bdff20b8b11a3e606e5581ebf3c06">zperiodic</a>) {ak=<a class="code" href="classvoro_1_1voro__base.html#a59a281a5e25e13f681c4f6a2c8bd1ca7">step_div</a>(ck,<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>);z-=ak*(<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>-<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>);ck-=ak*<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>;}
<a name="l00216"></a>00216                 <span class="keywordflow">else</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00217"></a>00217         } <span class="keywordflow">else</span> ak=0;
<a name="l00218"></a>00218 
<a name="l00219"></a>00219         ijk=ci+<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>*cj+<a class="code" href="classvoro_1_1voro__base.html#aad5f41101fce781214d2f0b69487a729">nxy</a>*ck;
<a name="l00220"></a>00220         <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00221"></a>00221 }
<a name="l00222"></a>00222 <span class="comment"></span>
<a name="l00223"></a>00223 <span class="comment">/** Takes a vector and finds the particle whose Voronoi cell contains that</span>
<a name="l00224"></a>00224 <span class="comment"> * vector. This is equivalent to finding the particle which is nearest to the</span>
<a name="l00225"></a>00225 <span class="comment"> * vector. Additional wall classes are not considered by this routine.</span>
<a name="l00226"></a>00226 <span class="comment"> * \param[in] (x,y,z) the vector to test.</span>
<a name="l00227"></a>00227 <span class="comment"> * \param[out] (rx,ry,rz) the position of the particle whose Voronoi cell</span>
<a name="l00228"></a>00228 <span class="comment"> *                        contains the vector. If the container is periodic,</span>
<a name="l00229"></a>00229 <span class="comment"> *                        this may point to a particle in a periodic image of</span>
<a name="l00230"></a>00230 <span class="comment"> *                        the primary domain.</span>
<a name="l00231"></a>00231 <span class="comment"> * \param[out] pid the ID of the particle.</span>
<a name="l00232"></a>00232 <span class="comment"> * \return True if a particle was found. If the container has no particles,</span>
<a name="l00233"></a>00233 <span class="comment"> * then the search will not find a Voronoi cell and false is returned. */</span>
<a name="l00234"></a><a class="code" href="classvoro_1_1container.html#a5e73bd52fe92985962a248fed566737b">00234</a> <span class="keywordtype">bool</span> <a class="code" href="classvoro_1_1container.html#a5e73bd52fe92985962a248fed566737b">container::find_voronoi_cell</a>(<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z,<span class="keywordtype">double</span> &amp;rx,<span class="keywordtype">double</span> &amp;ry,<span class="keywordtype">double</span> &amp;rz,<span class="keywordtype">int</span> &amp;pid) {
<a name="l00235"></a>00235         <span class="keywordtype">int</span> ai,aj,ak,ci,cj,ck,ijk;
<a name="l00236"></a>00236         <a class="code" href="structvoro_1_1particle__record.html" title="Structure for holding information about a particle.">particle_record</a> w;
<a name="l00237"></a>00237         <span class="keywordtype">double</span> mrs;
<a name="l00238"></a>00238 
<a name="l00239"></a>00239         <span class="comment">// If the given vector lies outside the domain, but the container</span>
<a name="l00240"></a>00240         <span class="comment">// is periodic, then remap it back into the domain</span>
<a name="l00241"></a>00241         <span class="keywordflow">if</span>(!<a class="code" href="classvoro_1_1container__base.html#abe09747feba40102470c91f93d25fbfc">remap</a>(ai,aj,ak,ci,cj,ck,x,y,z,ijk)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00242"></a>00242         vc.<a class="code" href="classvoro_1_1voro__compute.html#aa0b01474a0cf0b230b736e7352404d8d">find_voronoi_cell</a>(x,y,z,ci,cj,ck,ijk,w,mrs);
<a name="l00243"></a>00243 
<a name="l00244"></a>00244         <span class="keywordflow">if</span>(w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>!=-1) {
<a name="l00245"></a>00245 
<a name="l00246"></a>00246                 <span class="comment">// Assemble the position vector of the particle to be returned,</span>
<a name="l00247"></a>00247                 <span class="comment">// applying a periodic remapping if necessary</span>
<a name="l00248"></a>00248                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a6734b7147a71bb7e2a4a313d4153bebf">xperiodic</a>) {ci+=w.<a class="code" href="structvoro_1_1particle__record.html#a36ea6a17eb9dc145a3e5f14720b30d15">di</a>;<span class="keywordflow">if</span>(ci&lt;0||ci&gt;=<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>) ai+=<a class="code" href="classvoro_1_1voro__base.html#a59a281a5e25e13f681c4f6a2c8bd1ca7">step_div</a>(ci,<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>);}
<a name="l00249"></a>00249                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a05a979d24c3d0fefe9f5cd96174863f8">yperiodic</a>) {cj+=w.<a class="code" href="structvoro_1_1particle__record.html#a25c3b01e32ccdb6bb37e279f14899bab">dj</a>;<span class="keywordflow">if</span>(cj&lt;0||cj&gt;=<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>) aj+=<a class="code" href="classvoro_1_1voro__base.html#a59a281a5e25e13f681c4f6a2c8bd1ca7">step_div</a>(cj,<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>);}
<a name="l00250"></a>00250                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#acd3bdff20b8b11a3e606e5581ebf3c06">zperiodic</a>) {ck+=w.<a class="code" href="structvoro_1_1particle__record.html#a56e78394cc8a114cedf353a2d54c0077">dk</a>;<span class="keywordflow">if</span>(ck&lt;0||ck&gt;=<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>) ak+=<a class="code" href="classvoro_1_1voro__base.html#a59a281a5e25e13f681c4f6a2c8bd1ca7">step_div</a>(ck,<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>);}
<a name="l00251"></a>00251                 rx=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>][3*w.<a class="code" href="structvoro_1_1particle__record.html#a5faf0f540ad3ee3ffcee5cae5a8b20fc">l</a>]+ai*(<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>-<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>);
<a name="l00252"></a>00252                 ry=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>][3*w.<a class="code" href="structvoro_1_1particle__record.html#a5faf0f540ad3ee3ffcee5cae5a8b20fc">l</a>+1]+aj*(<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>-<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>);
<a name="l00253"></a>00253                 rz=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>][3*w.<a class="code" href="structvoro_1_1particle__record.html#a5faf0f540ad3ee3ffcee5cae5a8b20fc">l</a>+2]+ak*(<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>-<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>);
<a name="l00254"></a>00254                 pid=<span class="keywordtype">id</span>[w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>][w.<a class="code" href="structvoro_1_1particle__record.html#a5faf0f540ad3ee3ffcee5cae5a8b20fc">l</a>];
<a name="l00255"></a>00255                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00256"></a>00256         }
<a name="l00257"></a>00257 
<a name="l00258"></a>00258         <span class="comment">// If no particle if found then just return false</span>
<a name="l00259"></a>00259         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00260"></a>00260 }
<a name="l00261"></a>00261 <span class="comment"></span>
<a name="l00262"></a>00262 <span class="comment">/** Takes a vector and finds the particle whose Voronoi cell contains that</span>
<a name="l00263"></a>00263 <span class="comment"> * vector. Additional wall classes are not considered by this routine.</span>
<a name="l00264"></a>00264 <span class="comment"> * \param[in] (x,y,z) the vector to test.</span>
<a name="l00265"></a>00265 <span class="comment"> * \param[out] (rx,ry,rz) the position of the particle whose Voronoi cell</span>
<a name="l00266"></a>00266 <span class="comment"> *                        contains the vector. If the container is periodic,</span>
<a name="l00267"></a>00267 <span class="comment"> *                        this may point to a particle in a periodic image of</span>
<a name="l00268"></a>00268 <span class="comment"> *                        the primary domain.</span>
<a name="l00269"></a>00269 <span class="comment"> * \param[out] pid the ID of the particle.</span>
<a name="l00270"></a>00270 <span class="comment"> * \return True if a particle was found. If the container has no particles,</span>
<a name="l00271"></a>00271 <span class="comment"> * then the search will not find a Voronoi cell and false is returned. */</span>
<a name="l00272"></a><a class="code" href="classvoro_1_1container__poly.html#aa02b6b6e5605b28fc8ecf0cd0a757903">00272</a> <span class="keywordtype">bool</span> <a class="code" href="classvoro_1_1container__poly.html#aa02b6b6e5605b28fc8ecf0cd0a757903">container_poly::find_voronoi_cell</a>(<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z,<span class="keywordtype">double</span> &amp;rx,<span class="keywordtype">double</span> &amp;ry,<span class="keywordtype">double</span> &amp;rz,<span class="keywordtype">int</span> &amp;pid) {
<a name="l00273"></a>00273         <span class="keywordtype">int</span> ai,aj,ak,ci,cj,ck,ijk;
<a name="l00274"></a>00274         <a class="code" href="structvoro_1_1particle__record.html" title="Structure for holding information about a particle.">particle_record</a> w;
<a name="l00275"></a>00275         <span class="keywordtype">double</span> mrs;
<a name="l00276"></a>00276 
<a name="l00277"></a>00277         <span class="comment">// If the given vector lies outside the domain, but the container</span>
<a name="l00278"></a>00278         <span class="comment">// is periodic, then remap it back into the domain</span>
<a name="l00279"></a>00279         <span class="keywordflow">if</span>(!<a class="code" href="classvoro_1_1container__base.html#abe09747feba40102470c91f93d25fbfc">remap</a>(ai,aj,ak,ci,cj,ck,x,y,z,ijk)) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00280"></a>00280         vc.<a class="code" href="classvoro_1_1voro__compute.html#aa0b01474a0cf0b230b736e7352404d8d">find_voronoi_cell</a>(x,y,z,ci,cj,ck,ijk,w,mrs);
<a name="l00281"></a>00281 
<a name="l00282"></a>00282         <span class="keywordflow">if</span>(w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>!=-1) {
<a name="l00283"></a>00283 
<a name="l00284"></a>00284                 <span class="comment">// Assemble the position vector of the particle to be returned,</span>
<a name="l00285"></a>00285                 <span class="comment">// applying a periodic remapping if necessary</span>
<a name="l00286"></a>00286                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a6734b7147a71bb7e2a4a313d4153bebf">xperiodic</a>) {ci+=w.<a class="code" href="structvoro_1_1particle__record.html#a36ea6a17eb9dc145a3e5f14720b30d15">di</a>;<span class="keywordflow">if</span>(ci&lt;0||ci&gt;=<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>) ai+=<a class="code" href="classvoro_1_1voro__base.html#a59a281a5e25e13f681c4f6a2c8bd1ca7">step_div</a>(ci,<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>);}
<a name="l00287"></a>00287                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#a05a979d24c3d0fefe9f5cd96174863f8">yperiodic</a>) {cj+=w.<a class="code" href="structvoro_1_1particle__record.html#a25c3b01e32ccdb6bb37e279f14899bab">dj</a>;<span class="keywordflow">if</span>(cj&lt;0||cj&gt;=<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>) aj+=<a class="code" href="classvoro_1_1voro__base.html#a59a281a5e25e13f681c4f6a2c8bd1ca7">step_div</a>(cj,<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>);}
<a name="l00288"></a>00288                 <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__base.html#acd3bdff20b8b11a3e606e5581ebf3c06">zperiodic</a>) {ck+=w.<a class="code" href="structvoro_1_1particle__record.html#a56e78394cc8a114cedf353a2d54c0077">dk</a>;<span class="keywordflow">if</span>(ck&lt;0||ck&gt;=<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>) ak+=<a class="code" href="classvoro_1_1voro__base.html#a59a281a5e25e13f681c4f6a2c8bd1ca7">step_div</a>(ck,<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>);}
<a name="l00289"></a>00289                 rx=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>][4*w.<a class="code" href="structvoro_1_1particle__record.html#a5faf0f540ad3ee3ffcee5cae5a8b20fc">l</a>]+ai*(<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>-<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>);
<a name="l00290"></a>00290                 ry=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>][4*w.<a class="code" href="structvoro_1_1particle__record.html#a5faf0f540ad3ee3ffcee5cae5a8b20fc">l</a>+1]+aj*(<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>-<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>);
<a name="l00291"></a>00291                 rz=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>][4*w.<a class="code" href="structvoro_1_1particle__record.html#a5faf0f540ad3ee3ffcee5cae5a8b20fc">l</a>+2]+ak*(<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>-<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>);
<a name="l00292"></a>00292                 pid=<span class="keywordtype">id</span>[w.<a class="code" href="structvoro_1_1particle__record.html#ac65fa5fc929dda2dd454369eab68ef8b">ijk</a>][w.<a class="code" href="structvoro_1_1particle__record.html#a5faf0f540ad3ee3ffcee5cae5a8b20fc">l</a>];
<a name="l00293"></a>00293                 <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00294"></a>00294         }
<a name="l00295"></a>00295 
<a name="l00296"></a>00296         <span class="comment">// If no particle if found then just return false</span>
<a name="l00297"></a>00297         <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00298"></a>00298 }
<a name="l00299"></a>00299 <span class="comment"></span>
<a name="l00300"></a>00300 <span class="comment">/** Increase memory for a particular region.</span>
<a name="l00301"></a>00301 <span class="comment"> * \param[in] i the index of the region to reallocate. */</span>
<a name="l00302"></a><a class="code" href="classvoro_1_1container__base.html#aa0fe8c92c66463236a05924d466256da">00302</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__base.html#aa0fe8c92c66463236a05924d466256da">container_base::add_particle_memory</a>(<span class="keywordtype">int</span> i) {
<a name="l00303"></a>00303         <span class="keywordtype">int</span> l,nmem=<a class="code" href="classvoro_1_1container__base.html#a633edc1737859a7dde8ca2e466e12cfe">mem</a>[i]&lt;&lt;1;
<a name="l00304"></a>00304 
<a name="l00305"></a>00305         <span class="comment">// Carry out a check on the memory allocation size, and</span>
<a name="l00306"></a>00306         <span class="comment">// print a status message if requested</span>
<a name="l00307"></a>00307         <span class="keywordflow">if</span>(nmem&gt;max_particle_memory)
<a name="l00308"></a>00308                 voro_fatal_error(<span class="stringliteral">&quot;Absolute maximum memory allocation exceeded&quot;</span>,<a class="code" href="config_8hh.html#a5dc0616f8a67ae3d1c2ba8a3dcf5612b">VOROPP_MEMORY_ERROR</a>);
<a name="l00309"></a>00309 <span class="preprocessor">#if VOROPP_VERBOSE &gt;=3</span>
<a name="l00310"></a>00310 <span class="preprocessor"></span>        fprintf(stderr,<span class="stringliteral">&quot;Particle memory in region %d scaled up to %d\n&quot;</span>,i,nmem);
<a name="l00311"></a>00311 <span class="preprocessor">#endif</span>
<a name="l00312"></a>00312 <span class="preprocessor"></span>
<a name="l00313"></a>00313         <span class="comment">// Allocate new memory and copy in the contents of the old arrays</span>
<a name="l00314"></a>00314         <span class="keywordtype">int</span> *idp=<span class="keyword">new</span> <span class="keywordtype">int</span>[nmem];
<a name="l00315"></a>00315         <span class="keywordflow">for</span>(l=0;l&lt;<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>[i];l++) idp[l]=<span class="keywordtype">id</span>[i][l];
<a name="l00316"></a>00316         <span class="keywordtype">double</span> *pp=<span class="keyword">new</span> <span class="keywordtype">double</span>[<a class="code" href="classvoro_1_1container__base.html#a235781536a17eab85b547787ff3618ba">ps</a>*nmem];
<a name="l00317"></a>00317         <span class="keywordflow">for</span>(l=0;l&lt;<a class="code" href="classvoro_1_1container__base.html#a235781536a17eab85b547787ff3618ba">ps</a>*co[i];l++) pp[l]=<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[i][l];
<a name="l00318"></a>00318 
<a name="l00319"></a>00319         <span class="comment">// Update pointers and delete old arrays</span>
<a name="l00320"></a>00320         <a class="code" href="classvoro_1_1container__base.html#a633edc1737859a7dde8ca2e466e12cfe">mem</a>[i]=nmem;
<a name="l00321"></a>00321         <span class="keyword">delete</span> [] <span class="keywordtype">id</span>[i];<span class="keywordtype">id</span>[i]=idp;
<a name="l00322"></a>00322         <span class="keyword">delete</span> [] <a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[i];<a class="code" href="classvoro_1_1container__base.html#a0798a7623a37b1a9da86f225119606e5">p</a>[i]=pp;
<a name="l00323"></a>00323 }
<a name="l00324"></a>00324 <span class="comment"></span>
<a name="l00325"></a>00325 <span class="comment">/** Import a list of particles from an open file stream into the container.</span>
<a name="l00326"></a>00326 <span class="comment"> * Entries of four numbers (Particle ID, x position, y position, z position)</span>
<a name="l00327"></a>00327 <span class="comment"> * are searched for. If the file cannot be successfully read, then the routine</span>
<a name="l00328"></a>00328 <span class="comment"> * causes a fatal error.</span>
<a name="l00329"></a>00329 <span class="comment"> * \param[in] fp the file handle to read from. */</span>
<a name="l00330"></a><a class="code" href="classvoro_1_1container.html#a1e4fe0c7b59c93cdd3f965c59dbb2f66">00330</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container.html#a1e4fe0c7b59c93cdd3f965c59dbb2f66">container::import</a>(FILE *fp) {
<a name="l00331"></a>00331         <span class="keywordtype">int</span> i,j;
<a name="l00332"></a>00332         <span class="keywordtype">double</span> x,y,z;
<a name="l00333"></a>00333         <span class="keywordflow">while</span>((j=fscanf(fp,<span class="stringliteral">&quot;%d %lg %lg %lg&quot;</span>,&amp;i,&amp;x,&amp;y,&amp;z))==4) <a class="code" href="classvoro_1_1container.html#a5c67c9998e4f174fb217967dcb41c7f3">put</a>(i,x,y,z);
<a name="l00334"></a>00334         <span class="keywordflow">if</span>(j!=EOF) voro_fatal_error(<span class="stringliteral">&quot;File import error&quot;</span>,<a class="code" href="config_8hh.html#a8de7f106cac2556a67bcc61bd364ed38">VOROPP_FILE_ERROR</a>);
<a name="l00335"></a>00335 }
<a name="l00336"></a>00336 <span class="comment"></span>
<a name="l00337"></a>00337 <span class="comment">/** Import a list of particles from an open file stream, also storing the order</span>
<a name="l00338"></a>00338 <span class="comment"> * of that the particles are read. Entries of four numbers (Particle ID, x</span>
<a name="l00339"></a>00339 <span class="comment"> * position, y position, z position) are searched for. If the file cannot be</span>
<a name="l00340"></a>00340 <span class="comment"> * successfully read, then the routine causes a fatal error.</span>
<a name="l00341"></a>00341 <span class="comment"> * \param[in,out] vo a reference to an ordering class to use.</span>
<a name="l00342"></a>00342 <span class="comment"> * \param[in] fp the file handle to read from. */</span>
<a name="l00343"></a><a class="code" href="classvoro_1_1container.html#a7b3aa6219cfb0fd538839aeeae4457cc">00343</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container.html#a1e4fe0c7b59c93cdd3f965c59dbb2f66">container::import</a>(<a class="code" href="classvoro_1_1particle__order.html" title="A class for storing ordering information when particles are added to a container.">particle_order</a> &amp;vo,FILE *fp) {
<a name="l00344"></a>00344         <span class="keywordtype">int</span> i,j;
<a name="l00345"></a>00345         <span class="keywordtype">double</span> x,y,z;
<a name="l00346"></a>00346         <span class="keywordflow">while</span>((j=fscanf(fp,<span class="stringliteral">&quot;%d %lg %lg %lg&quot;</span>,&amp;i,&amp;x,&amp;y,&amp;z))==4) <a class="code" href="classvoro_1_1container.html#a5c67c9998e4f174fb217967dcb41c7f3">put</a>(vo,i,x,y,z);
<a name="l00347"></a>00347         <span class="keywordflow">if</span>(j!=EOF) voro_fatal_error(<span class="stringliteral">&quot;File import error&quot;</span>,<a class="code" href="config_8hh.html#a8de7f106cac2556a67bcc61bd364ed38">VOROPP_FILE_ERROR</a>);
<a name="l00348"></a>00348 }
<a name="l00349"></a>00349 <span class="comment"></span>
<a name="l00350"></a>00350 <span class="comment">/** Import a list of particles from an open file stream into the container.</span>
<a name="l00351"></a>00351 <span class="comment"> * Entries of five numbers (Particle ID, x position, y position, z position,</span>
<a name="l00352"></a>00352 <span class="comment"> * radius) are searched for. If the file cannot be successfully read, then the</span>
<a name="l00353"></a>00353 <span class="comment"> * routine causes a fatal error.</span>
<a name="l00354"></a>00354 <span class="comment"> * \param[in] fp the file handle to read from. */</span>
<a name="l00355"></a><a class="code" href="classvoro_1_1container__poly.html#a65ddee05ee3b3677c7a48f67ce64a1d5">00355</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__poly.html#a65ddee05ee3b3677c7a48f67ce64a1d5">container_poly::import</a>(FILE *fp) {
<a name="l00356"></a>00356         <span class="keywordtype">int</span> i,j;
<a name="l00357"></a>00357         <span class="keywordtype">double</span> x,y,z,r;
<a name="l00358"></a>00358         <span class="keywordflow">while</span>((j=fscanf(fp,<span class="stringliteral">&quot;%d %lg %lg %lg %lg&quot;</span>,&amp;i,&amp;x,&amp;y,&amp;z,&amp;r))==5) <a class="code" href="classvoro_1_1container__poly.html#a61689312fb6f8ee36f1fbb0fe00e4fe3">put</a>(i,x,y,z,r);
<a name="l00359"></a>00359         <span class="keywordflow">if</span>(j!=EOF) voro_fatal_error(<span class="stringliteral">&quot;File import error&quot;</span>,<a class="code" href="config_8hh.html#a8de7f106cac2556a67bcc61bd364ed38">VOROPP_FILE_ERROR</a>);
<a name="l00360"></a>00360 }
<a name="l00361"></a>00361 <span class="comment"></span>
<a name="l00362"></a>00362 <span class="comment">/** Import a list of particles from an open file stream, also storing the order</span>
<a name="l00363"></a>00363 <span class="comment"> * of that the particles are read. Entries of four numbers (Particle ID, x</span>
<a name="l00364"></a>00364 <span class="comment"> * position, y position, z position, radius) are searched for. If the file</span>
<a name="l00365"></a>00365 <span class="comment"> * cannot be successfully read, then the routine causes a fatal error.</span>
<a name="l00366"></a>00366 <span class="comment"> * \param[in,out] vo a reference to an ordering class to use.</span>
<a name="l00367"></a>00367 <span class="comment"> * \param[in] fp the file handle to read from. */</span>
<a name="l00368"></a><a class="code" href="classvoro_1_1container__poly.html#aecedca4f256e9382d54efb805877c68f">00368</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__poly.html#a65ddee05ee3b3677c7a48f67ce64a1d5">container_poly::import</a>(<a class="code" href="classvoro_1_1particle__order.html" title="A class for storing ordering information when particles are added to a container.">particle_order</a> &amp;vo,FILE *fp) {
<a name="l00369"></a>00369         <span class="keywordtype">int</span> i,j;
<a name="l00370"></a>00370         <span class="keywordtype">double</span> x,y,z,r;
<a name="l00371"></a>00371         <span class="keywordflow">while</span>((j=fscanf(fp,<span class="stringliteral">&quot;%d %lg %lg %lg %lg&quot;</span>,&amp;i,&amp;x,&amp;y,&amp;z,&amp;r))==5) <a class="code" href="classvoro_1_1container__poly.html#a61689312fb6f8ee36f1fbb0fe00e4fe3">put</a>(vo,i,x,y,z,r);
<a name="l00372"></a>00372         <span class="keywordflow">if</span>(j!=EOF) voro_fatal_error(<span class="stringliteral">&quot;File import error&quot;</span>,<a class="code" href="config_8hh.html#a8de7f106cac2556a67bcc61bd364ed38">VOROPP_FILE_ERROR</a>);
<a name="l00373"></a>00373 }
<a name="l00374"></a>00374 <span class="comment"></span>
<a name="l00375"></a>00375 <span class="comment">/** Outputs the a list of all the container regions along with the number of</span>
<a name="l00376"></a>00376 <span class="comment"> * particles stored within each. */</span>
<a name="l00377"></a><a class="code" href="classvoro_1_1container__base.html#ac1205c5c189d3dd72057c4cf9fa8891d">00377</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__base.html#ac1205c5c189d3dd72057c4cf9fa8891d">container_base::region_count</a>() {
<a name="l00378"></a>00378         <span class="keywordtype">int</span> i,j,k,*cop=<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>;
<a name="l00379"></a>00379         <span class="keywordflow">for</span>(k=0;k&lt;<a class="code" href="classvoro_1_1voro__base.html#aae461fbdf42c8975fb43d963d002298f">nz</a>;k++) <span class="keywordflow">for</span>(j=0;j&lt;<a class="code" href="classvoro_1_1voro__base.html#a83da5297e87173733d92d9024cebbbdb">ny</a>;j++) <span class="keywordflow">for</span>(i=0;i&lt;<a class="code" href="classvoro_1_1voro__base.html#a8aed82f1468c9bb7e2a779ea53a22594">nx</a>;i++)
<a name="l00380"></a>00380                 printf(<span class="stringliteral">&quot;Region (%d,%d,%d): %d particles\n&quot;</span>,i,j,k,*(cop++));
<a name="l00381"></a>00381 }
<a name="l00382"></a>00382 <span class="comment"></span>
<a name="l00383"></a>00383 <span class="comment">/** Clears a container of particles. */</span>
<a name="l00384"></a><a class="code" href="classvoro_1_1container.html#a0890eac6d9f02b8d7b8e41a8a98ff2ee">00384</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container.html#a0890eac6d9f02b8d7b8e41a8a98ff2ee">container::clear</a>() {
<a name="l00385"></a>00385         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> *cop=<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>;cop&lt;<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>+<a class="code" href="classvoro_1_1voro__base.html#a4309aca04ab561bd3b3921e9b73016a4">nxyz</a>;cop++) *cop=0;
<a name="l00386"></a>00386 }
<a name="l00387"></a>00387 <span class="comment"></span>
<a name="l00388"></a>00388 <span class="comment">/** Clears a container of particles, also clearing resetting the maximum radius</span>
<a name="l00389"></a>00389 <span class="comment"> * to zero. */</span>
<a name="l00390"></a><a class="code" href="classvoro_1_1container__poly.html#a0012f95f5666a347e6585efc76b63b83">00390</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__poly.html#a0012f95f5666a347e6585efc76b63b83">container_poly::clear</a>() {
<a name="l00391"></a>00391         <span class="keywordflow">for</span>(<span class="keywordtype">int</span> *cop=<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>;cop&lt;<a class="code" href="classvoro_1_1container__base.html#a987e612ffd2c459adf8c1784d308ef51">co</a>+<a class="code" href="classvoro_1_1voro__base.html#a4309aca04ab561bd3b3921e9b73016a4">nxyz</a>;cop++) *cop=0;
<a name="l00392"></a>00392         <a class="code" href="classvoro_1_1radius__poly.html#a9faed3ac8ef95c646e376a7fe915fb0b">max_radius</a>=0;
<a name="l00393"></a>00393 }
<a name="l00394"></a>00394 <span class="comment"></span>
<a name="l00395"></a>00395 <span class="comment">/** Computes all the Voronoi cells and saves customized information about them.</span>
<a name="l00396"></a>00396 <span class="comment"> * \param[in] format the custom output string to use.</span>
<a name="l00397"></a>00397 <span class="comment"> * \param[in] fp a file handle to write to. */</span>
<a name="l00398"></a><a class="code" href="classvoro_1_1container.html#a37508aa6ea56b625893bdde283d30e0c">00398</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container.html#a35c0c0b78ca0ba3fa10e6a9c4eece492">container::print_custom</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *format,FILE *fp) {
<a name="l00399"></a>00399         <a class="code" href="classvoro_1_1c__loop__all.html" title="Class for looping over all of the particles in a container.">c_loop_all</a> vl(*<span class="keyword">this</span>);
<a name="l00400"></a>00400         <a class="code" href="classvoro_1_1container.html#a35c0c0b78ca0ba3fa10e6a9c4eece492">print_custom</a>(vl,format,fp);
<a name="l00401"></a>00401 }
<a name="l00402"></a>00402 <span class="comment"></span>
<a name="l00403"></a>00403 <span class="comment">/** Computes all the Voronoi cells and saves customized</span>
<a name="l00404"></a>00404 <span class="comment"> * information about them.</span>
<a name="l00405"></a>00405 <span class="comment"> * \param[in] format the custom output string to use.</span>
<a name="l00406"></a>00406 <span class="comment"> * \param[in] fp a file handle to write to. */</span>
<a name="l00407"></a><a class="code" href="classvoro_1_1container__poly.html#adf5dcfbba15c482285c23e0ee54155d4">00407</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__poly.html#a60907bce91cfacfa054a69872fb10ee3">container_poly::print_custom</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *format,FILE *fp) {
<a name="l00408"></a>00408         <a class="code" href="classvoro_1_1c__loop__all.html" title="Class for looping over all of the particles in a container.">c_loop_all</a> vl(*<span class="keyword">this</span>);
<a name="l00409"></a>00409         <a class="code" href="classvoro_1_1container__poly.html#a60907bce91cfacfa054a69872fb10ee3">print_custom</a>(vl,format,fp);
<a name="l00410"></a>00410 }
<a name="l00411"></a>00411 <span class="comment"></span>
<a name="l00412"></a>00412 <span class="comment">/** Computes all the Voronoi cells and saves customized information about them.</span>
<a name="l00413"></a>00413 <span class="comment"> * \param[in] format the custom output string to use.</span>
<a name="l00414"></a>00414 <span class="comment"> * \param[in] filename the name of the file to write to. */</span>
<a name="l00415"></a><a class="code" href="classvoro_1_1container.html#a7adccdf76ab5ee9e29e48292a2cc43d9">00415</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container.html#a35c0c0b78ca0ba3fa10e6a9c4eece492">container::print_custom</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *format,<span class="keyword">const</span> <span class="keywordtype">char</span> *filename) {
<a name="l00416"></a>00416         FILE *fp=safe_fopen(filename,<span class="stringliteral">&quot;w&quot;</span>);
<a name="l00417"></a>00417         <a class="code" href="classvoro_1_1container.html#a35c0c0b78ca0ba3fa10e6a9c4eece492">print_custom</a>(format,fp);
<a name="l00418"></a>00418         fclose(fp);
<a name="l00419"></a>00419 }
<a name="l00420"></a>00420 <span class="comment"></span>
<a name="l00421"></a>00421 <span class="comment">/** Computes all the Voronoi cells and saves customized</span>
<a name="l00422"></a>00422 <span class="comment"> * information about them</span>
<a name="l00423"></a>00423 <span class="comment"> * \param[in] format the custom output string to use.</span>
<a name="l00424"></a>00424 <span class="comment"> * \param[in] filename the name of the file to write to. */</span>
<a name="l00425"></a><a class="code" href="classvoro_1_1container__poly.html#ab2eb9f5480fb9560b71ef1b1ed29b592">00425</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__poly.html#a60907bce91cfacfa054a69872fb10ee3">container_poly::print_custom</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *format,<span class="keyword">const</span> <span class="keywordtype">char</span> *filename) {
<a name="l00426"></a>00426         FILE *fp=safe_fopen(filename,<span class="stringliteral">&quot;w&quot;</span>);
<a name="l00427"></a>00427         <a class="code" href="classvoro_1_1container__poly.html#a60907bce91cfacfa054a69872fb10ee3">print_custom</a>(format,fp);
<a name="l00428"></a>00428         fclose(fp);
<a name="l00429"></a>00429 }
<a name="l00430"></a>00430 <span class="comment"></span>
<a name="l00431"></a>00431 <span class="comment">/** Computes all of the Voronoi cells in the container, but does nothing</span>
<a name="l00432"></a>00432 <span class="comment"> * with the output. It is useful for measuring the pure computation time</span>
<a name="l00433"></a>00433 <span class="comment"> * of the Voronoi algorithm, without any additional calculations such as</span>
<a name="l00434"></a>00434 <span class="comment"> * volume evaluation or cell output. */</span>
<a name="l00435"></a><a class="code" href="classvoro_1_1container.html#a2757cfc62be2f0496eddd0fccbc14ba6">00435</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container.html#a2757cfc62be2f0496eddd0fccbc14ba6">container::compute_all_cells</a>() {
<a name="l00436"></a>00436         <a class="code" href="classvoro_1_1voronoicell.html" title="Extension of the voronoicell_base class to represent a Voronoi cell without neighbor information...">voronoicell</a> c;
<a name="l00437"></a>00437         <a class="code" href="classvoro_1_1c__loop__all.html" title="Class for looping over all of the particles in a container.">c_loop_all</a> vl(*<span class="keyword">this</span>);
<a name="l00438"></a>00438         <span class="keywordflow">if</span>(vl.<a class="code" href="classvoro_1_1c__loop__all.html#acab7b0f3917a172844d4d2565913855d">start</a>()) <span class="keywordflow">do</span> <a class="code" href="classvoro_1_1container.html#a9808b60d80f1d3ccc06ebd0a2495ac7a">compute_cell</a>(c,vl);
<a name="l00439"></a>00439         <span class="keywordflow">while</span>(vl.<a class="code" href="classvoro_1_1c__loop__all.html#a322b26b0f78f73b345ee0af92f908df0">inc</a>());
<a name="l00440"></a>00440 }
<a name="l00441"></a>00441 <span class="comment"></span>
<a name="l00442"></a>00442 <span class="comment">/** Computes all of the Voronoi cells in the container, but does nothing</span>
<a name="l00443"></a>00443 <span class="comment"> * with the output. It is useful for measuring the pure computation time</span>
<a name="l00444"></a>00444 <span class="comment"> * of the Voronoi algorithm, without any additional calculations such as</span>
<a name="l00445"></a>00445 <span class="comment"> * volume evaluation or cell output. */</span>
<a name="l00446"></a><a class="code" href="classvoro_1_1container__poly.html#a40a4b63b1ac5980b92ca526ac2183489">00446</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__poly.html#a40a4b63b1ac5980b92ca526ac2183489">container_poly::compute_all_cells</a>() {
<a name="l00447"></a>00447         <a class="code" href="classvoro_1_1voronoicell.html" title="Extension of the voronoicell_base class to represent a Voronoi cell without neighbor information...">voronoicell</a> c;
<a name="l00448"></a>00448         <a class="code" href="classvoro_1_1c__loop__all.html" title="Class for looping over all of the particles in a container.">c_loop_all</a> vl(*<span class="keyword">this</span>);
<a name="l00449"></a>00449         <span class="keywordflow">if</span>(vl.<a class="code" href="classvoro_1_1c__loop__all.html#acab7b0f3917a172844d4d2565913855d">start</a>()) <span class="keywordflow">do</span> <a class="code" href="classvoro_1_1container__poly.html#ae01c610b46aad0aae4998697b69a4b1c">compute_cell</a>(c,vl);<span class="keywordflow">while</span>(vl.<a class="code" href="classvoro_1_1c__loop__all.html#a322b26b0f78f73b345ee0af92f908df0">inc</a>());
<a name="l00450"></a>00450 }
<a name="l00451"></a>00451 <span class="comment"></span>
<a name="l00452"></a>00452 <span class="comment">/** Calculates all of the Voronoi cells and sums their volumes. In most cases</span>
<a name="l00453"></a>00453 <span class="comment"> * without walls, the sum of the Voronoi cell volumes should equal the volume</span>
<a name="l00454"></a>00454 <span class="comment"> * of the container to numerical precision.</span>
<a name="l00455"></a>00455 <span class="comment"> * \return The sum of all of the computed Voronoi volumes. */</span>
<a name="l00456"></a><a class="code" href="classvoro_1_1container.html#accce43f61281a3c5d69893ad5187e3ec">00456</a> <span class="keywordtype">double</span> <a class="code" href="classvoro_1_1container.html#accce43f61281a3c5d69893ad5187e3ec">container::sum_cell_volumes</a>() {
<a name="l00457"></a>00457         <a class="code" href="classvoro_1_1voronoicell.html" title="Extension of the voronoicell_base class to represent a Voronoi cell without neighbor information...">voronoicell</a> c;
<a name="l00458"></a>00458         <span class="keywordtype">double</span> vol=0;
<a name="l00459"></a>00459         <a class="code" href="classvoro_1_1c__loop__all.html" title="Class for looping over all of the particles in a container.">c_loop_all</a> vl(*<span class="keyword">this</span>);
<a name="l00460"></a>00460         <span class="keywordflow">if</span>(vl.<a class="code" href="classvoro_1_1c__loop__all.html#acab7b0f3917a172844d4d2565913855d">start</a>()) <span class="keywordflow">do</span> <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container.html#a9808b60d80f1d3ccc06ebd0a2495ac7a">compute_cell</a>(c,vl)) vol+=c.<a class="code" href="classvoro_1_1voronoicell__base.html#a92f69986a6f78e7b8b6d9f5778ed99ba">volume</a>();<span class="keywordflow">while</span>(vl.<a class="code" href="classvoro_1_1c__loop__all.html#a322b26b0f78f73b345ee0af92f908df0">inc</a>());
<a name="l00461"></a>00461         <span class="keywordflow">return</span> vol;
<a name="l00462"></a>00462 }
<a name="l00463"></a>00463 <span class="comment"></span>
<a name="l00464"></a>00464 <span class="comment">/** Calculates all of the Voronoi cells and sums their volumes. In most cases</span>
<a name="l00465"></a>00465 <span class="comment"> * without walls, the sum of the Voronoi cell volumes should equal the volume</span>
<a name="l00466"></a>00466 <span class="comment"> * of the container to numerical precision.</span>
<a name="l00467"></a>00467 <span class="comment"> * \return The sum of all of the computed Voronoi volumes. */</span>
<a name="l00468"></a><a class="code" href="classvoro_1_1container__poly.html#a081af78a1c9c863393fd07a548a84a2e">00468</a> <span class="keywordtype">double</span> <a class="code" href="classvoro_1_1container__poly.html#a081af78a1c9c863393fd07a548a84a2e">container_poly::sum_cell_volumes</a>() {
<a name="l00469"></a>00469         <a class="code" href="classvoro_1_1voronoicell.html" title="Extension of the voronoicell_base class to represent a Voronoi cell without neighbor information...">voronoicell</a> c;
<a name="l00470"></a>00470         <span class="keywordtype">double</span> vol=0;
<a name="l00471"></a>00471         <a class="code" href="classvoro_1_1c__loop__all.html" title="Class for looping over all of the particles in a container.">c_loop_all</a> vl(*<span class="keyword">this</span>);
<a name="l00472"></a>00472         <span class="keywordflow">if</span>(vl.<a class="code" href="classvoro_1_1c__loop__all.html#acab7b0f3917a172844d4d2565913855d">start</a>()) <span class="keywordflow">do</span> <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1container__poly.html#ae01c610b46aad0aae4998697b69a4b1c">compute_cell</a>(c,vl)) vol+=c.<a class="code" href="classvoro_1_1voronoicell__base.html#a92f69986a6f78e7b8b6d9f5778ed99ba">volume</a>();<span class="keywordflow">while</span>(vl.<a class="code" href="classvoro_1_1c__loop__all.html#a322b26b0f78f73b345ee0af92f908df0">inc</a>());
<a name="l00473"></a>00473         <span class="keywordflow">return</span> vol;
<a name="l00474"></a>00474 }
<a name="l00475"></a>00475 <span class="comment"></span>
<a name="l00476"></a>00476 <span class="comment">/** This function tests to see if a given vector lies within the container</span>
<a name="l00477"></a>00477 <span class="comment"> * bounds and any walls.</span>
<a name="l00478"></a>00478 <span class="comment"> * \param[in] (x,y,z) the position vector to be tested.</span>
<a name="l00479"></a>00479 <span class="comment"> * \return True if the point is inside the container, false if the point is</span>
<a name="l00480"></a>00480 <span class="comment"> *         outside. */</span>
<a name="l00481"></a><a class="code" href="classvoro_1_1container__base.html#a290c21ba694d02231d49d14881dfcfd1">00481</a> <span class="keywordtype">bool</span> <a class="code" href="classvoro_1_1container__base.html#a290c21ba694d02231d49d14881dfcfd1">container_base::point_inside</a>(<span class="keywordtype">double</span> x,<span class="keywordtype">double</span> y,<span class="keywordtype">double</span> z) {
<a name="l00482"></a>00482         <span class="keywordflow">if</span>(x&lt;ax||x&gt;<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>||y&lt;ay||y&gt;<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>||z&lt;az||z&gt;<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>) <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00483"></a>00483         <span class="keywordflow">return</span> <a class="code" href="classvoro_1_1wall__list.html#ae6d83d60ffa99fb6712445616883d1c8">point_inside_walls</a>(x,y,z);
<a name="l00484"></a>00484 }
<a name="l00485"></a>00485 <span class="comment"></span>
<a name="l00486"></a>00486 <span class="comment">/** Draws an outline of the domain in gnuplot format.</span>
<a name="l00487"></a>00487 <span class="comment"> * \param[in] fp the file handle to write to. */</span>
<a name="l00488"></a><a class="code" href="classvoro_1_1container__base.html#a67dbf4a79fac8527ccee72d881c6654d">00488</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__base.html#a67dbf4a79fac8527ccee72d881c6654d">container_base::draw_domain_gnuplot</a>(FILE *fp) {
<a name="l00489"></a>00489         fprintf(fp,<span class="stringliteral">&quot;%g %g %g\n%g %g %g\n%g %g %g\n%g %g %g\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>);
<a name="l00490"></a>00490         fprintf(fp,<span class="stringliteral">&quot;%g %g %g\n%g %g %g\n%g %g %g\n%g %g %g\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>);
<a name="l00491"></a>00491         fprintf(fp,<span class="stringliteral">&quot;%g %g %g\n\n%g %g %g\n%g %g %g\n\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>);
<a name="l00492"></a>00492         fprintf(fp,<span class="stringliteral">&quot;%g %g %g\n%g %g %g\n\n%g %g %g\n%g %g %g\n\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>);
<a name="l00493"></a>00493 }
<a name="l00494"></a>00494 <span class="comment"></span>
<a name="l00495"></a>00495 <span class="comment">/** Draws an outline of the domain in POV-Ray format.</span>
<a name="l00496"></a>00496 <span class="comment"> * \param[in] fp the file handle to write to. */</span>
<a name="l00497"></a><a class="code" href="classvoro_1_1container__base.html#a6ff9d18058ab53c955cd44dea733e4fd">00497</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1container__base.html#a6ff9d18058ab53c955cd44dea733e4fd">container_base::draw_domain_pov</a>(FILE *fp) {
<a name="l00498"></a>00498         fprintf(fp,<span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>
<a name="l00499"></a>00499                    <span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>);
<a name="l00500"></a>00500         fprintf(fp,<span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>
<a name="l00501"></a>00501                    <span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>);
<a name="l00502"></a>00502         fprintf(fp,<span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>
<a name="l00503"></a>00503                    <span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>);
<a name="l00504"></a>00504         fprintf(fp,<span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>
<a name="l00505"></a>00505                    <span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>);
<a name="l00506"></a>00506         fprintf(fp,<span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>
<a name="l00507"></a>00507                    <span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>);
<a name="l00508"></a>00508         fprintf(fp,<span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>
<a name="l00509"></a>00509                    <span class="stringliteral">&quot;cylinder{&lt;%g,%g,%g&gt;,&lt;%g,%g,%g&gt;,rr}\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>);
<a name="l00510"></a>00510         fprintf(fp,<span class="stringliteral">&quot;sphere{&lt;%g,%g,%g&gt;,rr}\nsphere{&lt;%g,%g,%g&gt;,rr}\n&quot;</span>
<a name="l00511"></a>00511                    <span class="stringliteral">&quot;sphere{&lt;%g,%g,%g&gt;,rr}\nsphere{&lt;%g,%g,%g&gt;,rr}\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a78d795a863e401a5fc565c7dec31b6a6">az</a>);
<a name="l00512"></a>00512         fprintf(fp,<span class="stringliteral">&quot;sphere{&lt;%g,%g,%g&gt;,rr}\nsphere{&lt;%g,%g,%g&gt;,rr}\n&quot;</span>
<a name="l00513"></a>00513                    <span class="stringliteral">&quot;sphere{&lt;%g,%g,%g&gt;,rr}\nsphere{&lt;%g,%g,%g&gt;,rr}\n&quot;</span>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ab64ef06e1e257e83a33422a044ef9858">ay</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#ab33ca2a8d7282d65a731d854d27906f2">ax</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>,<a class="code" href="classvoro_1_1container__base.html#afd9b8e6b3c6bb4376d1f755ef7ac789d">bx</a>,<a class="code" href="classvoro_1_1container__base.html#ae769a416d7a5520eddf026cec6f7fda6">by</a>,<a class="code" href="classvoro_1_1container__base.html#a27de2088113bb64a4b045bea7c590be3">bz</a>);
<a name="l00514"></a>00514 }
<a name="l00515"></a>00515 
<a name="l00516"></a>00516 <span class="comment"></span>
<a name="l00517"></a>00517 <span class="comment">/** The wall_list constructor sets up an array of pointers to wall classes. */</span>
<a name="l00518"></a><a class="code" href="classvoro_1_1wall__list.html#a248fb5d008de9a5a97d4720d47794698">00518</a> <a class="code" href="classvoro_1_1wall__list.html#a248fb5d008de9a5a97d4720d47794698">wall_list::wall_list</a>() : walls(new <a class="code" href="classvoro_1_1wall.html" title="Pure virtual class from which wall objects are derived.">wall</a>*[init_wall_size]), wep(walls), wel(walls+init_wall_size),
<a name="l00519"></a>00519         current_wall_size(init_wall_size) {}
<a name="l00520"></a>00520 <span class="comment"></span>
<a name="l00521"></a>00521 <span class="comment">/** The wall_list destructor frees the array of pointers to the wall classes.</span>
<a name="l00522"></a>00522 <span class="comment"> */</span>
<a name="l00523"></a><a class="code" href="classvoro_1_1wall__list.html#a8b0402f2bfad31b7d0204d4120cd60be">00523</a> <a class="code" href="classvoro_1_1wall__list.html#a8b0402f2bfad31b7d0204d4120cd60be">wall_list::~wall_list</a>() {
<a name="l00524"></a>00524         <span class="keyword">delete</span> [] <a class="code" href="classvoro_1_1wall__list.html#abfc54768de5b596237d7eef5f589fe90">walls</a>;
<a name="l00525"></a>00525 }
<a name="l00526"></a>00526 <span class="comment"></span>
<a name="l00527"></a>00527 <span class="comment">/** Adds all of the walls on another wall_list to this class.</span>
<a name="l00528"></a>00528 <span class="comment"> * \param[in] wl a reference to the wall class. */</span>
<a name="l00529"></a><a class="code" href="classvoro_1_1wall__list.html#af872ae39e2bb8fe1e6947644a84cb1a8">00529</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1wall__list.html#aca50327f246b61f6aeef5337327d957d">wall_list::add_wall</a>(<a class="code" href="classvoro_1_1wall__list.html" title="A class for storing a list of pointers to walls.">wall_list</a> &amp;wl) {
<a name="l00530"></a>00530         <span class="keywordflow">for</span>(<a class="code" href="classvoro_1_1wall.html" title="Pure virtual class from which wall objects are derived.">wall</a> **wp=wl.<a class="code" href="classvoro_1_1wall__list.html#abfc54768de5b596237d7eef5f589fe90">walls</a>;wp&lt;wl.<a class="code" href="classvoro_1_1wall__list.html#abb48a3e29042c51cf48fa6a6b6c2dc1d">wep</a>;wp++) <a class="code" href="classvoro_1_1wall__list.html#aca50327f246b61f6aeef5337327d957d">add_wall</a>(*wp);
<a name="l00531"></a>00531 }
<a name="l00532"></a>00532 <span class="comment"></span>
<a name="l00533"></a>00533 <span class="comment">/** Deallocates all of the wall classes pointed to by the wall_list. */</span>
<a name="l00534"></a><a class="code" href="classvoro_1_1wall__list.html#a49c42b672f2eb7535c3b3564bb6cf51f">00534</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1wall__list.html#a49c42b672f2eb7535c3b3564bb6cf51f">wall_list::deallocate</a>() {
<a name="l00535"></a>00535         <span class="keywordflow">for</span>(<a class="code" href="classvoro_1_1wall.html" title="Pure virtual class from which wall objects are derived.">wall</a> **wp=<a class="code" href="classvoro_1_1wall__list.html#abfc54768de5b596237d7eef5f589fe90">walls</a>;wp&lt;<a class="code" href="classvoro_1_1wall__list.html#abb48a3e29042c51cf48fa6a6b6c2dc1d">wep</a>;wp++) <span class="keyword">delete</span> *wp;
<a name="l00536"></a>00536 }
<a name="l00537"></a>00537 <span class="comment"></span>
<a name="l00538"></a>00538 <span class="comment">/** Increases the memory allocation for the walls array. */</span>
<a name="l00539"></a><a class="code" href="classvoro_1_1wall__list.html#afb2cd60a3624dd4033ccddd690321489">00539</a> <span class="keywordtype">void</span> <a class="code" href="classvoro_1_1wall__list.html#afb2cd60a3624dd4033ccddd690321489">wall_list::increase_wall_memory</a>() {
<a name="l00540"></a>00540         <a class="code" href="classvoro_1_1wall__list.html#a8a06b6562bbf488ff30852cd1a548506">current_wall_size</a>&lt;&lt;=1;
<a name="l00541"></a>00541         <span class="keywordflow">if</span>(<a class="code" href="classvoro_1_1wall__list.html#a8a06b6562bbf488ff30852cd1a548506">current_wall_size</a>&gt;max_wall_size)
<a name="l00542"></a>00542                 voro_fatal_error(<span class="stringliteral">&quot;Wall memory allocation exceeded absolute maximum&quot;</span>,<a class="code" href="config_8hh.html#a5dc0616f8a67ae3d1c2ba8a3dcf5612b">VOROPP_MEMORY_ERROR</a>);
<a name="l00543"></a>00543         <a class="code" href="classvoro_1_1wall.html" title="Pure virtual class from which wall objects are derived.">wall</a> **nwalls=<span class="keyword">new</span> <a class="code" href="classvoro_1_1wall.html" title="Pure virtual class from which wall objects are derived.">wall</a>*[<a class="code" href="classvoro_1_1wall__list.html#a8a06b6562bbf488ff30852cd1a548506">current_wall_size</a>],**nwp=nwalls,**wp=<a class="code" href="classvoro_1_1wall__list.html#abfc54768de5b596237d7eef5f589fe90">walls</a>;
<a name="l00544"></a>00544         <span class="keywordflow">while</span>(wp&lt;<a class="code" href="classvoro_1_1wall__list.html#abb48a3e29042c51cf48fa6a6b6c2dc1d">wep</a>) *(nwp++)=*(wp++);
<a name="l00545"></a>00545         <span class="keyword">delete</span> [] <a class="code" href="classvoro_1_1wall__list.html#abfc54768de5b596237d7eef5f589fe90">walls</a>;
<a name="l00546"></a>00546         <a class="code" href="classvoro_1_1wall__list.html#abfc54768de5b596237d7eef5f589fe90">walls</a>=nwalls;<a class="code" href="classvoro_1_1wall__list.html#a292491bc99b6bbc819bb3720fcfb08a1">wel</a>=<a class="code" href="classvoro_1_1wall__list.html#abfc54768de5b596237d7eef5f589fe90">walls</a>+<a class="code" href="classvoro_1_1wall__list.html#a8a06b6562bbf488ff30852cd1a548506">current_wall_size</a>;<a class="code" href="classvoro_1_1wall__list.html#abb48a3e29042c51cf48fa6a6b6c2dc1d">wep</a>=nwp;
<a name="l00547"></a>00547 }
<a name="l00548"></a>00548 
<a name="l00549"></a>00549 }
</pre></div></div>
</div>


<hr class="footer"/><address class="footer"><small>
Generated on Fri Sep 23 2011 22:49:06 for Voro++ by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.7.5.1
</small></address>

</body>
</html>
